一个生成Telegram内文件直链的机器人。
此仓库源于 EverythingSuckz/TG-FileStreamBot 的 python 分支,遵循 GNU Affero General Public License。
- docker-compose.yml: 移除硬编码敏感信息,改为从
.env文件读取 - 依赖更新: 更新 aiohttp 到 >=3.9.0 (修复 CVE-2023-25527, CVE-2023-3164)
- 速率限制: 添加每 IP 60 秒内最多 30 次请求的限流保护
- BIN_CHANNEL 验证: 启动时检查 BIN_CHANNEL 是否为空,为空则报错退出
- 异常处理: 保留完整堆栈信息便于调试
- 后台任务管理: 添加任务取消机制,防止资源泄漏
- 客户端初始化: 失败时抛出异常而非静默忽略
- 拼写修正: FIleNotFound → FileNotFound
- Python 版本: 升级至 3.12-alpine,使用多阶段构建减小镜像体积
- 类型安全: 添加 from_user 判空检查,parse_file_id 显式返回 None
这是一个 Telegram 机器人,它将为您提供 Telegram 文件的流链接,无需等待下载完成。
-
克隆仓库:
git clone https://github.com/suanx/TG-FileStreamBot.git cd TG-FileStreamBot -
创建
.env文件,填入 Telegram 配置:API_ID=your_api_id API_HASH=your_api_hash BOT_TOKEN=your_bot_token BIN_CHANNEL=your_channel_id PORT=9191 NO_PORT=true FQDN=example.com HAS_SSL=true -
编辑
docker-compose.yml,将镜像地址修改为您的 GitHub 用户名和仓库名:image: ghcr.io/suanx/tg-filestreambot:latest
-
启动:
docker-compose up -d
API_ID:Telegram 帐户的 API ID,从 my.telegram.org 获取。API_HASH:Telegram 帐户的 API 哈希,从 my.telegram.org 获取。BOT_TOKEN:机器人令牌,从 @BotFather 获取。BIN_CHANNEL:日志频道 ID。创建频道后,发布一条消息,回复该消息给 @missrose_bot 使用/id命令获取。
| 变量 | 默认值 | 说明 |
|---|---|---|
HASH_LENGTH |
6 | 生成 URL 的哈希长度(6~63) |
SLEEP_THRESHOLD |
60 | 洪水等待异常睡眠阈值(秒) |
WORKERS |
6 | 并发工作者数量 |
PORT |
8080 | Web 服务监听端口 |
WEB_SERVER_BIND_ADDRESS |
0.0.0.0 | 服务器绑定地址 |
NO_PORT |
False | URL 中是否省略端口号 |
FQDN |
WEB_SERVER_BIND_ADDRESS |
完全限定域名 |
HAS_SSL |
False | 是否使用 HTTPS |
KEEP_ALIVE |
False | 是否启用自保活 ping(PaaS 免费层有用) |
PING_INTERVAL |
1200 | 自保活 ping 间隔(秒) |
USE_SESSION_FILE |
False | 使用会话文件而非内存数据库 |
ALLOWED_USERS |
空 | 用户白名单(逗号分隔的用户 ID 或用户名) |
MULTI_TOKEN1=your_bot_token_1
MULTI_TOKEN2=your_bot_token_2
警告:所有机器人必须加入
BIN_CHANNEL才能正常工作。
推送代码到 release 分支时,GitHub Actions 会自动构建 Docker 镜像并推送到 GitHub Container Registry (ghcr.io)。
- 镜像地址:
ghcr.io/suanx/tg-filestreambot:latest
直接发送/转发文件,稍等片刻,机器人将会返回直链。
